/*
 * @ProjectName: 编程学习
 * @Copyright:   2019 HangZhou Yi Dev, Ltd. All Right Reserved.
 * @address:     https://yiyuery.github.io/
 * @date:        2019/5/20 20:57
 * @email:       xiazhaoyang@live.com
 * @description: 本内容仅限于编程技术学习使用，转发请注明出处.
 */
package com.example.template.pattern.decorator.base;


import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * <p>
 *
 * </p>
 *
 * @author Yi
 * @version v1.0.0
 * @date 2019-08-10 18:06
 * @modificationHistory=========================逻辑或功能性重大变更记录
 * @modify By: {修改人} 2019-08-10
 * @modify reason: {方法名}:{原因}
 * ...
 */
public abstract class AbstractBeverage implements IBeverage {

    /**
     * 子类具体饮料
     */
    protected String description;
    /**
     * 定义容量，可以由外部传入
     */
    public Capacity capacity;

    /**
     * 定义饮料的描述方法【饮料A:+调料1、+调料2、+选择不同的杯容量】
     * @return
     */
    public abstract String getDescription();

    /**
     * 定义杯容量
     * @return
     */
    public abstract Capacity getCapacity();

    /**
     * 容量枚举定义
     */
    @AllArgsConstructor
    @Getter
    public enum Capacity{

        /**
         * 大杯
         */
        SMALL("small"),
        /**
         * 中杯
         */
        MIDDLE("middle"),
        /**
         * 小杯
         */
        BIG("big");

        private String name;
    }

    /**
     * 设置容量
     * @param capacity
     */
    public void setCapacity(Capacity capacity) {
        this.capacity = capacity;
    }
}
